package traveldreamEJB;

import java.io.Serializable;

import javax.persistence.*;

import supportClass.IstanzaDTO;

import java.util.Date;


/**
 * The persistent class for the istanza database table.
 * 
 */
@Entity
@Table(name="istanza")
@NamedQueries
({
	@NamedQuery(name="Istanza.findAll", query="SELECT i FROM Istanza i"),
	@NamedQuery(name="Istanza.findMax", query="SELECT MAX(i.idIstanza) FROM Istanza i"),
	@NamedQuery(name="Istanza.findAllHotel", query="SELECT i FROM Istanza i WHERE i.elemento.tipo='Hotel'"),
	@NamedQuery(name="Istanza.findAllHotelInPacchetto", query="SELECT i FROM Istanza i join Pacchetto p WHERE i.elemento.tipo='Hotel' and p.idPacchetto=:pacchetto and i.disponibilita>0"),
	@NamedQuery(name="Istanza.findAllEscursione", query="SELECT i FROM Istanza i WHERE i.elemento.tipo='Escursione'"),
	@NamedQuery(name="Istanza.findAllEscursioniInPacchetto", query="SELECT i FROM Istanza i join Pacchetto p WHERE i.elemento.tipo='Escursione' and p.idPacchetto=:pacchetto and i.elemento.tipo='Escursione' and i.dataInizio>=:dataInizio and i.dataFine<=:dataFine and i.disponibilita>0"),
	@NamedQuery(name="Istanza.findAllVolo", query="SELECT i FROM Istanza i WHERE i.elemento.tipo='Volo'"),
	@NamedQuery(name="Istanza.findIstanzaByID", query="SELECT i FROM Istanza i WHERE i.idIstanza=:idIstanza")
})
public class Istanza implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id 
	@Column(unique=true, nullable=false)
	private int idIstanza;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false)
	private Date dataFine;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable=false)
	private Date dataInizio;

	@Column(nullable=false)
	private int disponibilita;

	@Column(nullable=false)
	private int prezzo;

	//bi-directional many-to-one association to Elemento
	@ManyToOne
	@JoinColumn(name="Elemento_idElemento", nullable=false)
	private Elemento elemento;
	
	

	public Istanza() {
	}

	public Istanza(IstanzaDTO istanza, Elemento elemento) {
		// TODO Auto-generated constructor stub
		this.dataFine=istanza.getDataFine();
		this.dataInizio=istanza.getDataInizio();
		this.disponibilita=istanza.getDisponibilita();
		this.elemento=elemento;
		this.idIstanza=istanza.getIdIstanza();
		this.prezzo=istanza.getPrezzo();
	}

	public int getIdIstanza() {
		return this.idIstanza;
	}

	public void setIdIstanza(int idIstanza) {
		this.idIstanza = idIstanza;
	}

	public Date getDataFine() {
		return this.dataFine;
	}

	public void setDataFine(Date dataFine) {
		this.dataFine = dataFine;
	}

	public Date getDataInizio() {
		return this.dataInizio;
	}

	public void setDataInizio(Date dataInizio) {
		this.dataInizio = dataInizio;
	}

	public int getDisponibilita() {
		return this.disponibilita;
	}

	public void setDisponibilita(int disponibilita) {
		this.disponibilita = disponibilita;
	}

	public int getPrezzo() {
		return this.prezzo;
	}

	public void setPrezzo(int prezzo) {
		this.prezzo = prezzo;
	}

	public Elemento getElemento() {
		return this.elemento;
	}

	public void setElemento(Elemento elemento) {
		this.elemento = elemento;
	}

}